A livello C, gli oggetti Ruby sono rappresentati da strutture che separano dati dal comportamento attraverso una gerarchia basata sui puntatori. Il klass puntatore collega un'istanza alla sua "classe associata" (dove si trovano i metodi), mentre il super puntatore collega le classi ai loro antenati, creando una mappa strutturale che la macchina virtuale Ruby utilizza per risolvere l'ereditarietà.
1. Il puntatore klass e i flag
Ogni oggetto Ruby contiene un'intestazione con un klass puntatore e un bitmask di flag. Questi flag identificano lo stato interno dell'oggetto, ad esempio contrassegnando le "classi virtuali" create automaticamente con un 'V' per gestire l'assegnazione dei metodi singleton.
2. Separazione dello stato (Figura 24.1)
Un'istanza come lucille memorizza le proprie variabili istantane, ma non possiede metodi propri. Il suo klass puntatore indirizza la VM alla Guitar tabella dei metodi dell'oggetto classe.
3. Catena di ereditarietà
Quando lucille.suona() viene chiamato, Ruby segue il klass puntatore. Se il metodo non viene trovato in Guitar, segue il super puntatore a Oggetto, concedendo l'accesso a clona o copia.